sudoers
文件精确控制了用户权限, 不过只需少许努力, 你依然可以从 sudo
中获益匪浅.
在本文中, 我们会演示一些简单而又十分有价值的 sudo
用法.
在大多数的Linux发行版中,可以很容易地做到让指定用户拥有以root运行命令的能力. 你甚至无需修改 /etc/sudoers
文件.
只需要将用户添加到 sudo
或 admin
组就行了.
在 /etc/group
文件中将用户加入 sudo
或 admin
组中就赋予了那些用户使用 sudo
运行命令的权利.
$ grep sudo /etc/group
sudo:x:27:shs,jdoe,peanut
在标准的 /etc/sudoers
配置中, 一旦将用户纳入这两个组中就能立即使用 sudo
命令了.
它的权限由 /etc/sudoers
文件中的下面行决定:
%sudo ALL=(ALL:ALL) ALL
行内的 %sudo
(或 %admin
) 部分表示 sudo
(或 admin
) 组. 剩下的内容允许组中的成员以任意用户的身份运行任意命令. 这是内建的行为.
如果你不希望有人拥有这项能力, 那就不要把任何人加入 sudo
(或 admin
) 组中.
$ sudo whoami
[sudo] password for shs:
root
虽然大多数人使用 sudo
的目的是以root的身份运行命令, 但它也能允许你以其他用户的身份来运行命令. 只要使用 -u
参数加上指定的用户名就行了.
$ sudo -u jdoe whoami
[sudo] password for shs:
jdoe
必须使用 visudo
命令来西修改 /etc/sudoers
文件,该命令会帮你避免配置出错导致配置文件不可用(即,损害了 sudo).
若你不习惯改命令默认使用的编辑器,你可以使用下面命令修改它:
sudo update-alternatives --config editor
改命令会显示一个编辑器列表,并且当前使用的编辑器前有一个星号标识,在这里你可以选择自己喜欢的编辑器.
$ sudo update-alternatives --config editor
[sudo] password for shs:
There are 3 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number:
时常会有需要在每个命令前都加上 “sudo” 的时候. 默认的 /etc/sudoers
配置中,sudo (或 admin) 组中的成员可以使用命令 sudo su -
来获取root权限.
但使用root账户时请一定小心.
$ sudo su -
[sudo] password for jdoe:
root@stinkbug:~#
损坏的 /etc/sudoers
文件会使得 sudo
无法正常工作. 幸运的是有一些简单的方法可以帮到你, visudo 命令本身会提供一些错误的详细信息.
The problem
shs@stinkbug:/etc$ sudo date
>>> /etc/sudoers: syntax error near line 3 <<<
sudo: parse error in /etc/sudoers near line 3
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
The fix
shs@stinkbug:/etc$ pkexec visudo
>>> /etc/sudoers: syntax error near line 3 <<<